/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.web.actions.usuarios;

import com.ejemplo.bt.cuentas.services.CuentaServices;
import com.ejemplo.bt.cuentas.vo.Cuenta;
import com.ejemplo.bt.monedas.services.MonedaServices;
import com.ejemplo.bt.monedas.vo.Moneda;
import com.web.actions.AbstractAction;
import com.web.actions.usuarios.vo.CuentaEditorActionForm;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

/**
 *
 * @author Usuario
 */
public class CuentaEditorAction extends AbstractAction {

    /* forward name="success" path="" */
    private static final String SUCCESS = "success";

    /**
     * This is the action called from the Struts framework.
     *
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     * @throws java.lang.Exception
     * @return
     */
    @Override
    public ActionForward execute(ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest request,
      HttpServletResponse response) {

    ActionErrors errors = new ActionErrors();

    try {
      CuentaServices services = new CuentaServices();
      CuentaEditorActionForm datosValidados = new CuentaEditorActionForm();
      
      long idCuenta = 0;
      try {  
          idCuenta = new Long((String)request.getParameter("idCuenta")).longValue();
      }
      catch (NumberFormatException nfex) {
          try {
             idCuenta = ((Long) request.getAttribute("idCuenta")).longValue();
          }
          catch (Exception ex) {
             idCuenta = datosValidados.getIdCuenta();
          }
      }      

      datosValidados.setIdCuenta(idCuenta);
      MonedaServices ms = new MonedaServices();
          List<Moneda> monedasRegistradas = ms.obtenerMonedas();
          request.setAttribute("monedas", monedasRegistradas);
      // chequeo si estoy creando una cuenta o si estoy editando una ya existente
      if (idCuenta == 0){
        datosValidados.setNroCuenta(0);
        datosValidados.setIdMoneda(0);
        datosValidados.setSaldo(0);
        datosValidados.setCliente(0);
        
      }
      else {
        //recupero la cuenta
          
        Cuenta cuenta = services.obtenerCuenta(idCuenta);

        //datosValidados.setIdCuenta(cuenta.getIdCuenta());
        datosValidados.setNroCuenta(cuenta.getNroCuenta());
        datosValidados.setIdMoneda(cuenta.getMoneda().getIdMoneda());
        datosValidados.setSaldo(cuenta.getSaldo());
        //datosValidados.setCliente(cuenta.getCliente());
        datosValidados.setCliente(cuenta.getCliente().getIdUsuario());
      }
      
      // cargo los datos validados en el request
      request.setAttribute("datosValidados", datosValidados);
  
      // Forwardeo
      return actionMapping.findForward("success");
    }
    catch (Exception ex) {
    	ex.printStackTrace();
        // Seteo los errores en el request.
        errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionMessage("error.message",
            ex.getMessage()));
        saveErrors(request, errors);

        // Forwardeo.
        return actionMapping.findForward("failure");
    }
  }
}
